home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / xalan.jar / org / apache / xalan / xslt / StylesheetRoot.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-04-12  |  14.6 KB  |  486 lines

  1. package org.apache.xalan.xslt;
  2.  
  3. import java.io.FileNotFoundException;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.io.ObjectInputStream;
  7. import java.io.OutputStream;
  8. import java.io.OutputStreamWriter;
  9. import java.io.Serializable;
  10. import java.io.UnsupportedEncodingException;
  11. import java.io.Writer;
  12. import java.net.MalformedURLException;
  13. import java.net.URL;
  14. import java.util.Enumeration;
  15. import java.util.Stack;
  16. import java.util.StringTokenizer;
  17. import java.util.TooManyListenersException;
  18. import java.util.Vector;
  19. import org.apache.xalan.xpath.ExtensionFunctionHandler;
  20. import org.apache.xalan.xpath.dtm.DTMLiaison;
  21. import org.apache.xalan.xpath.xml.FormatterToDOM;
  22. import org.apache.xalan.xpath.xml.FormatterToHTML;
  23. import org.apache.xalan.xpath.xml.FormatterToText;
  24. import org.apache.xalan.xpath.xml.FormatterToXML;
  25. import org.apache.xalan.xpath.xml.MutableAttrListImpl;
  26. import org.apache.xalan.xpath.xml.QName;
  27. import org.apache.xalan.xpath.xml.XSLMessages;
  28. import org.apache.xalan.xslt.trace.SelectionEvent;
  29. import org.apache.xalan.xslt.trace.TraceListener;
  30. import org.apache.xalan.xslt.trace.TracerEvent;
  31. import org.apache.xml.serialize.OutputFormat;
  32. import org.apache.xml.serialize.XMLSerializer;
  33. import org.w3c.dom.Document;
  34. import org.w3c.dom.DocumentFragment;
  35. import org.w3c.dom.Element;
  36. import org.w3c.dom.Node;
  37. import org.xml.sax.AttributeList;
  38. import org.xml.sax.DocumentHandler;
  39. import org.xml.sax.SAXException;
  40.  
  41. public class StylesheetRoot extends Stylesheet implements Serializable {
  42.    String m_resultNameSpaceURL;
  43.    transient Vector m_traceListeners;
  44.    static final String DEFAULT_ENCODING = "UTF-8";
  45.    String m_liaisonClassUsedToCreate;
  46.    public boolean m_useXercesSerializers = false;
  47.    String m_outputmethod;
  48.    String m_version;
  49.    boolean m_indentResult = false;
  50.    String m_encoding;
  51.    String m_mediatype;
  52.    String m_doctypeSystem;
  53.    String m_doctypePublic;
  54.    boolean m_omitxmlDecl = false;
  55.    boolean m_standalone = false;
  56.    QName[] m_cdataSectionElems;
  57.    transient Stack m_importStack;
  58.    public ElemTemplate m_defaultTextRule;
  59.    public ElemTemplate m_defaultRule;
  60.    public ElemTemplate m_defaultRootRule;
  61.  
  62.    private void readObject(ObjectInputStream var1) throws IOException, SAXException {
  63.       try {
  64.          var1.defaultReadObject();
  65.       } catch (ClassNotFoundException var3) {
  66.          throw new XSLProcessorException(var3);
  67.       }
  68.  
  69.       this.m_traceListeners = null;
  70.    }
  71.  
  72.    public void addTraceListener(TraceListener var1) throws TooManyListenersException {
  73.       if (this.m_traceListeners == null) {
  74.          this.m_traceListeners = new Vector();
  75.       }
  76.  
  77.       this.m_traceListeners.addElement(var1);
  78.    }
  79.  
  80.    public void removeTraceListener(TraceListener var1) {
  81.       if (this.m_traceListeners != null) {
  82.          this.m_traceListeners.removeElement(var1);
  83.       }
  84.  
  85.    }
  86.  
  87.    void fireTraceEvent(TracerEvent var1) {
  88.       if (this.m_traceListeners != null) {
  89.          int var2 = this.m_traceListeners.size();
  90.  
  91.          for(int var3 = 0; var3 < var2; ++var3) {
  92.             TraceListener var4 = (TraceListener)this.m_traceListeners.elementAt(var3);
  93.             var4.trace(var1);
  94.          }
  95.       }
  96.  
  97.    }
  98.  
  99.    void fireSelectedEvent(SelectionEvent var1) throws SAXException {
  100.       if (this.m_traceListeners != null) {
  101.          int var2 = this.m_traceListeners.size();
  102.  
  103.          for(int var3 = 0; var3 < var2; ++var3) {
  104.             TraceListener var4 = (TraceListener)this.m_traceListeners.elementAt(var3);
  105.             var4.selected(var1);
  106.          }
  107.       }
  108.  
  109.    }
  110.  
  111.    public StylesheetRoot(XSLTEngineImpl var1, String var2) throws XSLProcessorException, MalformedURLException, FileNotFoundException, IOException, SAXException {
  112.       super((StylesheetRoot)null, var1, var2);
  113.    }
  114.  
  115.    protected void init(XSLTEngineImpl var1) throws XSLProcessorException, MalformedURLException, FileNotFoundException, IOException, SAXException {
  116.       this.m_liaisonClassUsedToCreate = var1.getXMLProcessorLiaison().getClass().getName();
  117.       this.m_importStack = new Stack();
  118.       if (super.m_baseIdent == null) {
  119.          super.m_baseIdent = "";
  120.       }
  121.  
  122.       URL var2 = var1.getURLFromString(super.m_baseIdent, (String)null);
  123.       super.m_baseIdent = var2.toExternalForm();
  124.       this.m_importStack.push(var1.getURLFromString(super.m_baseIdent, (String)null));
  125.       super.m_stylesheetRoot = this;
  126.       super.init(var1);
  127.    }
  128.  
  129.    public OutputFormat getOutputFormat() {
  130.       OutputFormat var1 = new OutputFormat(this.getOutputMethod(), this.getOutputEncoding(), this.getOutputIndent());
  131.       var1.setDoctype(this.getOutputDoctypePublic(), this.getOutputDoctypeSystem());
  132.       var1.setOmitXMLDeclaration(this.getOmitOutputXMLDecl());
  133.       var1.setStandalone(this.getOutputStandalone());
  134.       var1.setMediaType(this.getOutputMediaType());
  135.       var1.setVersion(this.getOutputVersion());
  136.       if (this.getOutputIndent()) {
  137.          var1.setIndent(var1.getIndent() + 1);
  138.       }
  139.  
  140.       return var1;
  141.    }
  142.  
  143.    public void process(XSLTInputSource var1, XSLTResultTarget var2) throws SAXException, MalformedURLException, FileNotFoundException, IOException {
  144.       XSLTProcessor var10000;
  145.       if (this.m_liaisonClassUsedToCreate != null) {
  146.          new XSLTProcessorFactory();
  147.          var10000 = XSLTProcessorFactory.getProcessorUsingLiaisonName(this.m_liaisonClassUsedToCreate);
  148.       } else {
  149.          new XSLTProcessorFactory();
  150.          var10000 = XSLTProcessorFactory.getProcessor();
  151.       }
  152.  
  153.       XSLTProcessor var3 = var10000;
  154.       this.process(var3, var3.getSourceTreeFromInput(var1), var2);
  155.    }
  156.  
  157.    public void process(XSLTProcessor var1, XSLTInputSource var2, XSLTResultTarget var3) throws SAXException, MalformedURLException, FileNotFoundException, IOException {
  158.       this.process(var1, var1.getSourceTreeFromInput(var2), var3);
  159.    }
  160.  
  161.    public void process(XSLTProcessor var1, Node var2, XSLTResultTarget var3) throws SAXException, MalformedURLException, FileNotFoundException, IOException {
  162.       XSLTEngineImpl var4 = (XSLTEngineImpl)var1;
  163.       synchronized(var4){}
  164.  
  165.       try {
  166.          var4.switchLiaisonsIfNeeded(var2, var3.getNode());
  167.          var4.m_stylesheetRoot = this;
  168.          FileOutputStream var7 = null;
  169.  
  170.          try {
  171.             var4.getXMLProcessorLiaison().checkNode(var2);
  172.             Enumeration var10 = super.m_extensionNamespaces.keys();
  173.  
  174.             while(var10.hasMoreElements()) {
  175.                Object var11 = var10.nextElement();
  176.                var4.getExecContext().addExtensionNamespace((String)var11, (ExtensionFunctionHandler)super.m_extensionNamespaces.get(var11));
  177.             }
  178.  
  179.             ElemTemplate var24 = ((Stylesheet)this).findTemplate(var4, var2, var2);
  180.             if (var24 == null) {
  181.                var24 = this.m_defaultRootRule;
  182.             }
  183.  
  184.             DocumentHandler var12 = var3.getDocumentHandler();
  185.             OutputFormat var13 = this.getOutputFormat();
  186.             if (var3.getEncoding() != null) {
  187.                var13.setEncoding(var3.getEncoding());
  188.             }
  189.  
  190.             if (var12 != null) {
  191.                var4.m_flistener = var12;
  192.             } else if (var3.getByteStream() != null) {
  193.                if (var4.m_parserLiaison.getIndent() >= 0) {
  194.                   var13.setIndent(var4.m_parserLiaison.getIndent() + 1);
  195.                }
  196.  
  197.                var4.m_flistener = this.makeSAXSerializer(var3.getByteStream(), var13);
  198.             } else if (var3.getCharacterStream() != null) {
  199.                if (var4.m_parserLiaison.getIndent() >= 0) {
  200.                   var13.setIndent(var4.m_parserLiaison.getIndent() + 1);
  201.                }
  202.  
  203.                var4.m_flistener = this.makeSAXSerializer(var3.getCharacterStream(), var13);
  204.             } else if (var3.getFileName() != null) {
  205.                if (var4.m_parserLiaison.getIndent() >= 0) {
  206.                   var13.setIndent(var4.m_parserLiaison.getIndent() + 1);
  207.                }
  208.  
  209.                var7 = new FileOutputStream(var3.getFileName());
  210.                var4.m_flistener = this.makeSAXSerializer((OutputStream)var7, var13);
  211.             } else if (var3.getNode() != null) {
  212.                if (var4.getXMLProcessorLiaison() instanceof DTMLiaison) {
  213.                   var4.error(96);
  214.                }
  215.  
  216.                switch (var3.getNode().getNodeType()) {
  217.                   case 1:
  218.                      var4.m_flistener = new FormatterToDOM(var4.m_parserLiaison.createDocument(), (Element)var3.getNode());
  219.                      break;
  220.                   case 9:
  221.                      var4.m_flistener = new FormatterToDOM((Document)var3.getNode());
  222.                      break;
  223.                   case 11:
  224.                      var4.m_flistener = new FormatterToDOM(var4.m_parserLiaison.createDocument(), (DocumentFragment)var3.getNode());
  225.                      break;
  226.                   default:
  227.                      ((UnImplNode)this).error(43);
  228.                }
  229.             } else {
  230.                var3.setNode(var4.m_parserLiaison.createDocument());
  231.                var4.m_flistener = new FormatterToDOM((Document)var3.getNode());
  232.             }
  233.  
  234.             var4.resetCurrentState(var2);
  235.             var4.m_rootDoc = var2;
  236.             if (var4.m_diagnosticsPrintWriter != null) {
  237.                var4.diag("=============================");
  238.                var4.diag("Transforming...");
  239.                var4.pushTime(var2);
  240.             }
  241.  
  242.             var4.getVarStack().pushContextMarker();
  243.  
  244.             try {
  245.                var4.resolveTopLevelParams();
  246.             } catch (Exception var21) {
  247.                throw new SAXException(XSLMessages.createMessage(44, (Object[])null), var21);
  248.             }
  249.  
  250.             var4.m_resultTreeHandler.startDocument();
  251.             var24.execute(var4, var2, var2, (QName)null);
  252.             var4.m_resultTreeHandler.endDocument();
  253.             var4.m_topLevelParams = new Vector();
  254.             if (var4.m_diagnosticsPrintWriter != null) {
  255.                var4.displayDuration("transform", var2);
  256.             }
  257.          } finally {
  258.             if (var7 != null) {
  259.                ((OutputStream)var7).close();
  260.             }
  261.  
  262.          }
  263.       } catch (Throwable var23) {
  264.          throw var23;
  265.       }
  266.  
  267.    }
  268.  
  269.    public DocumentHandler makeSAXSerializer(Writer var1, OutputFormat var2) {
  270.       Object var3;
  271.       if (this.m_useXercesSerializers) {
  272.          var3 = new XMLSerializer(var1, var2);
  273.       } else if (var2 == null) {
  274.          var2 = new OutputFormat("xml", "UTF-8", false);
  275.          FormatterToXML var4 = new FormatterToXML();
  276.          var4.init(var1, var2);
  277.          var3 = var4;
  278.       } else if (var2.getMethod().equalsIgnoreCase("html")) {
  279.          FormatterToHTML var6 = new FormatterToHTML();
  280.          ((FormatterToXML)var6).init(var1, var2);
  281.          var3 = var6;
  282.       } else if (var2.getMethod().equalsIgnoreCase("xml")) {
  283.          FormatterToXML var7 = new FormatterToXML();
  284.          var7.init(var1, var2);
  285.          var3 = var7;
  286.       } else if (var2.getMethod().equalsIgnoreCase("text")) {
  287.          var3 = new FormatterToText(var1);
  288.       } else if (var2.getMethod().equalsIgnoreCase("xhtml")) {
  289.          var3 = new XMLSerializer(var1, var2);
  290.       } else {
  291.          var3 = new XMLSerializer(var1, var2);
  292.       }
  293.  
  294.       return (DocumentHandler)var3;
  295.    }
  296.  
  297.    public DocumentHandler getSAXSerializer(OutputStream var1) throws UnsupportedEncodingException {
  298.       return this.makeSAXSerializer(var1, this.getOutputFormat());
  299.    }
  300.  
  301.    public DocumentHandler makeSAXSerializer(OutputStream var1, OutputFormat var2) throws UnsupportedEncodingException {
  302.       Object var3;
  303.       if (this.m_useXercesSerializers) {
  304.          var3 = new XMLSerializer(var1, var2);
  305.       } else if (var2 == null) {
  306.          var2 = new OutputFormat("xml", "UTF-8", false);
  307.          FormatterToXML var4 = new FormatterToXML();
  308.          var4.init(var1, var2);
  309.          var3 = var4;
  310.       } else if (var2.getMethod().equalsIgnoreCase("html")) {
  311.          FormatterToHTML var9 = new FormatterToHTML();
  312.          ((FormatterToXML)var9).init(var1, var2);
  313.          var3 = var9;
  314.       } else if (var2.getMethod().equalsIgnoreCase("xml")) {
  315.          FormatterToXML var10 = new FormatterToXML();
  316.          var10.init(var1, var2);
  317.          var3 = var10;
  318.       } else if (var2.getMethod().equalsIgnoreCase("text")) {
  319.          String var11 = var2.getEncoding();
  320.          if (var11 == null) {
  321.             try {
  322.                var11 = System.getProperty("file.encoding");
  323.                var11 = var11 != null ? FormatterToXML.convertJava2MimeEncoding(var11) : "ASCII";
  324.                if (var11 == null) {
  325.                   var11 = "ASCII";
  326.                }
  327.             } catch (SecurityException var7) {
  328.                var11 = "ASCII";
  329.             }
  330.          }
  331.  
  332.          this.m_encoding = var11;
  333.          String var5 = FormatterToXML.convertMime2JavaEncoding(var11);
  334.          OutputStreamWriter var6 = new OutputStreamWriter(var1, var5);
  335.          var3 = new FormatterToText(var6);
  336.       } else if (var2.getMethod().equalsIgnoreCase("xhtml")) {
  337.          var3 = new XMLSerializer(var1, var2);
  338.       } else {
  339.          var3 = new XMLSerializer(var1, var2);
  340.       }
  341.  
  342.       return (DocumentHandler)var3;
  343.    }
  344.  
  345.    public String getOutputMethod() {
  346.       return this.m_outputmethod == null ? "xml" : this.m_outputmethod;
  347.    }
  348.  
  349.    public boolean isOutputMethodSet() {
  350.       return this.m_outputmethod != null;
  351.    }
  352.  
  353.    public void setOutputMethod(String var1) {
  354.       this.m_outputmethod = var1;
  355.    }
  356.  
  357.    public String getOutputVersion() {
  358.       return this.m_version;
  359.    }
  360.  
  361.    public boolean getOutputIndent() {
  362.       return this.m_indentResult;
  363.    }
  364.  
  365.    public String getOutputEncoding() {
  366.       return this.m_encoding;
  367.    }
  368.  
  369.    public String getOutputMediaType() {
  370.       return this.m_mediatype;
  371.    }
  372.  
  373.    public String getOutputDoctypeSystem() {
  374.       return this.m_doctypeSystem;
  375.    }
  376.  
  377.    public String getOutputDoctypePublic() {
  378.       return this.m_doctypePublic;
  379.    }
  380.  
  381.    public boolean getOmitOutputXMLDecl() {
  382.       return this.m_omitxmlDecl;
  383.    }
  384.  
  385.    public boolean getOutputStandalone() {
  386.       return this.m_standalone;
  387.    }
  388.  
  389.    public QName[] getCDataSectionElems() {
  390.       return this.m_cdataSectionElems;
  391.    }
  392.  
  393.    void processOutputSpec(String var1, AttributeList var2) throws SAXException {
  394.       int var3 = var2.getLength();
  395.       boolean var4 = false;
  396.  
  397.       for(int var5 = 0; var5 < var3; ++var5) {
  398.          String var6 = var2.getName(var5);
  399.          if (var6.equals("method")) {
  400.             this.m_outputmethod = var2.getValue(var5);
  401.          } else if (var6.equals("version")) {
  402.             this.m_version = var2.getValue(var5);
  403.          } else if (var6.equals("indent")) {
  404.             this.m_indentResult = ((Stylesheet)this).getYesOrNo(var6, var2.getValue(var5));
  405.             var4 = true;
  406.          } else if (var6.equals("encoding")) {
  407.             this.m_encoding = var2.getValue(var5);
  408.          } else if (var6.equals("media-type")) {
  409.             this.m_mediatype = var2.getValue(var5);
  410.          } else if (var6.equals("doctype-system")) {
  411.             this.m_doctypeSystem = var2.getValue(var5);
  412.          } else if (var6.equals("doctype-public")) {
  413.             this.m_doctypePublic = var2.getValue(var5);
  414.          } else if (var6.equals("omit-xml-declaration")) {
  415.             this.m_omitxmlDecl = ((Stylesheet)this).getYesOrNo(var6, var2.getValue(var5));
  416.          } else if (var6.equals("standalone")) {
  417.             this.m_standalone = ((Stylesheet)this).getYesOrNo(var6, var2.getValue(var5));
  418.          } else if (!var6.equals("cdata-section-elements")) {
  419.             if (!((Stylesheet)this).isAttrOK(var6, var2, var5)) {
  420.                throw new SAXException(XSLMessages.createMessage(2, new Object[]{var1, var6}));
  421.             }
  422.          } else {
  423.             StringTokenizer var7 = new StringTokenizer(var2.getValue(var5));
  424.             int var8 = var7.countTokens();
  425.             int var9;
  426.             if (this.m_cdataSectionElems == null) {
  427.                this.m_cdataSectionElems = new QName[var8];
  428.                var9 = 0;
  429.             } else {
  430.                QName[] var10 = this.m_cdataSectionElems;
  431.                int var11 = var10.length;
  432.                this.m_cdataSectionElems = new QName[var8 + var11];
  433.  
  434.                for(int var12 = 0; var12 < var11; ++var12) {
  435.                   this.m_cdataSectionElems[var12] = var10[var12];
  436.                }
  437.  
  438.                var9 = var11;
  439.             }
  440.  
  441.             while(var7.hasMoreTokens()) {
  442.                String var13 = var7.nextToken();
  443.                QName var14 = new QName(var13, super.m_namespaces);
  444.                this.m_cdataSectionElems[var9] = var14;
  445.                ++var9;
  446.             }
  447.          }
  448.       }
  449.  
  450.       if (this.m_outputmethod != null && this.m_outputmethod.equals("html") && !var4) {
  451.          this.m_indentResult = true;
  452.       }
  453.  
  454.    }
  455.  
  456.    boolean isRoot() {
  457.       return true;
  458.    }
  459.  
  460.    void initDefaultRule() throws XSLProcessorException, SAXException {
  461.       byte var1 = 0;
  462.       byte var2 = 0;
  463.       MutableAttrListImpl var3 = new MutableAttrListImpl();
  464.       var3.addAttribute("match", "CDATA", "*");
  465.       this.m_defaultRule = new ElemTemplate((XSLTEngineImpl)null, this, "xsl:template", var3, var1, var2);
  466.       var3.clear();
  467.       ElemApplyTemplates var4 = new ElemApplyTemplates((XSLTEngineImpl)null, this, "xsl:apply-templates", var3, var1, var2);
  468.       var4.m_isDefaultTemplate = true;
  469.       this.m_defaultRule.appendChild(var4);
  470.       var3.clear();
  471.       var3.addAttribute("match", "CDATA", "text() | @*");
  472.       this.m_defaultTextRule = new ElemTemplate((XSLTEngineImpl)null, this, "xsl:template", var3, var1, var2);
  473.       var3.clear();
  474.       var3.addAttribute("select", "CDATA", ".");
  475.       ElemValueOf var5 = new ElemValueOf((XSLTEngineImpl)null, this, "xsl:value-of", var3, var1, var2);
  476.       this.m_defaultTextRule.appendChild(var5);
  477.       var3.clear();
  478.       var3.addAttribute("match", "CDATA", "/");
  479.       this.m_defaultRootRule = new ElemTemplate((XSLTEngineImpl)null, this, "xsl:template", var3, var1, var2);
  480.       var3.clear();
  481.       var4 = new ElemApplyTemplates((XSLTEngineImpl)null, this, "xsl:apply-templates", var3, var1, var2);
  482.       var4.m_isDefaultTemplate = true;
  483.       this.m_defaultRootRule.appendChild(var4);
  484.    }
  485. }
  486.